/*****************************************************
 * 検索動作全体を管理するロジック
 * @author kino
 *****************************************************/
function SearchManager(session, query){
    this.session = session;
    this.query = query;
    
    /** {Map} 検索結果群 key={ItemType}, value={AbstractResults} */
    this.searchResults = {};
    
    /** {Map} 結果画面構築ロジック群 key={ItemType}, value={AbstractResultsView} */
    this.resultViews = {};
    
    /** {AbstractResults} 現在選択している検索結果 */
    this.currentResult = null;
    
    /** {AbstractResultsView} 現在選択している結果画面構築ロジック */
    this.currentView = null;
}

/**
 * インスタンスの初期化処理。必ず他のメソッドよりも先に呼ぶこと。
 */
SearchManager.prototype.initialize = function(){
    this.searchResults[ItemType.COMPOUND] = new CompoundResults();
    this.searchResults[ItemType.BUDGET] = new BudgetResults();
    this.searchResults[ItemType.OUTGOING] = new OutgoingResults();
    
    this.resultViews[ItemType.COMPOUND] = new CompoundResultsView(this.session, this.query, this.searchResults[ItemType.COMPOUND]);
    this.resultViews[ItemType.BUDGET] = new BudgetResultsView(this.session, this.query, this.searchResults[ItemType.BUDGET]);
    this.resultViews[ItemType.OUTGOING] = new OutgoingResultsView(this.session, this.query, this.searchResults[ItemType.OUTGOING]);
	
	this.changeCurrent();
}

/**
 * 現在選択されている表示データ種類に適したデータモデル・ビューを、現在値として設定する。
 */
SearchManager.prototype.changeCurrent = function(){
    this.currentResult = this.searchResults[this.query.itemType];
    this.currentView = this.resultViews[this.query.itemType];
}

/**
 * 表示データ種類の変更要求に対する処理
 * @param {ItemType} itemType 変更後の表示データ種類
 */
SearchManager.prototype.selectItemType = function(itemType){
    this.query.itemType = itemType;
	this.changeCurrent();
	this.currentView.search();
}
